#-*- coding: utf-8 -*-
"""
@author: Bruno Figueira 11234
@author: Luis Pereira 12784
@last updated: 25-11-2014
@obs: Modulo que faz a conexao com a Base de Dados
e realiza as operacoes referentes a mesma
"""

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from model import Base, DadosIPCPortugal


class DBManager():
    """
    Cria a conexao com a base de dados SQLite e realiza todas
    as operacoes relacionadas com a mesma
    """

    DATABASE_PATH = 'sqlite:///model/database.db'

    def __init__(self):
        """
        Construtor da classe DBManager
        """
        self.engine = create_engine(DBManager.DATABASE_PATH, echo=False)
        Session = sessionmaker(bind=self.engine)
        self.session = Session()
        Base.metadata.create_all(self.engine)

    def add_line(self, line):
        """
        Adiciona uma line de valores à tabela, caso não hajam erros

        Keyword arguments:
        line -- Objeto que identifica um registo da base de dados
        """
        try:
            self.session.add(line)
            self.session.commit()
        except:
            self.session.rollback()

    def get_all_data(self):
        """
        Retorna todos os dados existentes no DadosIPCPortugal
        """
        return self.session.query(DadosIPCPortugal).all()

    def get_data_filtered_by_years(self, start, end):
        """
        Retorna todos os dados existentes num intervalo de anos indicados

        Keyword arguments:
        start -- Ano inicial
        end -- Ano final
        """
        return self.session.query(DadosIPCPortugal).\
            filter(DadosIPCPortugal.ano >= start,
            DadosIPCPortugal.ano <= end).all()